#ifndef ZHILAISDK_ZLDOORCONTROLBOARD_H_
#define ZHILAISDK_ZLDOORCONTROLBOARD_H_

#include "zhilaiSDK.h"

ZLDEVICE_BEGIN_EXPORT

/// \brief 获取格口数量
/// 获取当前柜子配置的格口数量
///
/// \return 格口数量
ZLDEVICE_API int32_t ZLDcbGetBoxCount();

/// \brief 查询固件版本号
/// 返回当前柜子中接入的所有开门板的固件版本号，版本号文本格式为"板号:固件版本;板号:固件版本"
/// 示例："1:v1.0.0;2:v1.0.0"
///
/// 查询固件版本号
/// \param[out] version 固件版本号
/// \return 错误码
ZLDEVICE_API int32_t ZLDcbGetFirmwareVersion(char *version);

/// \brief 打开箱门
///
/// 该接口用于打开序号为index的格口
/// \param[in] boxnum 指定格口的序号
/// \return 错误码
ZLDEVICE_API int32_t ZLDcbOpenLocker(int32_t boxnum);

/// \brief 打开箱门
///
/// 打开指定箱门，并获该格口的门磁状态 (0x00：门关， 0x01： 门开，0x02 异常)
/// \param[in] boxnum  指定开门板上的箱号
/// \param[out] status  00：箱子打开成功标志
/// \param[out] 状态数据长度
/// \return 错误码
ZLDEVICE_API int32_t ZLDcbOpenLockerStatus(int32_t boxnum, unsigned char *status);

/// \brief 获取全部门磁状态
///
/// 获取开门板的门磁状态数据，其中每个字节表示一个格口的门磁状态
/// (0x00：门关，0x01：门开，0x02 异常）状态值按与格口顺序一一对应
/// \param[out] status 二进制状态数据
/// \param[out] len 状态数据长度
/// \return 错误码
ZLDEVICE_API int32_t ZLDcbGetAllDoorStatus(unsigned char *status, size_t *len);

/// \brief 获取指定门磁状态
///
/// 获取某一个箱门的格口门磁状态数据, 每一个字节表示一个格口的状态 
/// (0x00：门关，0x01：门开，0x02 异常）
/// \param[in] boxnum  指定开门板上的箱号
/// \param[out] status 二进制状态数据
/// \return 错误码
ZLDEVICE_API int32_t ZLDcbGetDoorStatus(int32_t boxnum, unsigned char *status);

/// \brief 获取物品状态
///
/// 获取指定的开门板的物品状态数据，其中每个字节表示一个可口的物品状态
/// (0x00：无物，0x01：有物，0x02 异常)，状态值按（1-24）顺序排列
/// \param[in] col 指定开门板的板号
/// \param[out] status 二进制状态数据
/// \param[out] 状态数据长度
/// \return 错误码
ZLDEVICE_API int32_t ZLDcbGetAllItemStatus(unsigned char *status, size_t *len);

/// \brief 获取指定格口物品状态
///
/// 获取指定的开门板某一个箱子的物品状态, 每一个字节表示一个格口的状态 
/// (0x00：无物，0x01：有物，0x02 异常)
/// \param[in] col 指定开门板的板号
/// \param[in] boxnum  指定开门板上的箱号
/// \param[out] status 二进制状态数据
/// \return 错误码
ZLDEVICE_API int32_t ZLDcbGetItemStatus(int32_t boxnum, unsigned char *status);

ZLDEVICE_END_EXPORT

#endif // ZHILAISDK_ZLDOORCONTROLBOARD_H_